﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
using System.Configuration;

namespace VIKI.Factory
{
    /// <summary>
    /// 此类用于实现抽象工厂模式去创建从配置文件指定的数据访问层的实例
    /// </summary>
    public sealed class DataAccess
    {
        // 查找我们将要使用的数据访问层
        private static readonly string path = ConfigurationManager.AppSettings["WebDAL"];

        //实现 CreateUser 方法，用于创建User类实例
        public static VIKI.IDAL.IUserDAL CreateUser()
        {
            string className = path + ".UserDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IUserDAL)Assembly.Load(path).CreateInstance(className);
        }
       //实现 CreateCourse 方法，用于创建Course类实例
        public static VIKI.IDAL.ICourseDAL CreateCourse()
        {
            string className = path + ".CourseDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.ICourseDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateTeacher 方法，用于创建Teacher类实例
        public static VIKI.IDAL.ITeacherDAL CreateTeacher()
        {
            string className = path + ".TeacherDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.ITeacherDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateInvite 方法，用于创建Invite类实例
        public static VIKI.IDAL.IInviteDAL CreateInvite()
        {
            string className = path + ".InviteDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IInviteDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateJudgement 方法，用于创建Judgement类实例
        public static VIKI.IDAL.IJudgementDAL CreateJudgement()
        {
            string className = path + ".JudgementDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IJudgementDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateKind 方法，用于创建Kind类实例
        public static VIKI.IDAL.IKindDAL CreateKind()
        {
            string className = path + ".KindDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IKindDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateOrder 方法，用于创建Order类实例
        public static VIKI.IDAL.IOrderDAL CreateOrder()
        {
            string className = path + ".OrderDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IOrderDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreatePicture 方法，用于创建Picture类实例
        public static VIKI.IDAL.IPictureDAL CreatePicture()
        {
            string className = path + ".PictureDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IPictureDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateProgress 方法，用于创建Progress类实例
        public static VIKI.IDAL.IProgressDAL CreateProgress()
        {
            string className = path + ".ProgressDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IProgressDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateReadpass 方法，用于创建Readpass类实例
        public static VIKI.IDAL.IReadpassDAL CreateReadpass()
        {
            string className = path + ".ReadpassDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IReadpassDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateReadtest方法，用于创建Readtest类实例
        public static VIKI.IDAL.IReadtestDAL CreatReadtest()
        {
            string className = path + ".ReadtestDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IReadtestDAL)Assembly.Load(path).CreateInstance(className);
        }
        
        //实现 CreateZhtest方法，用于创建Zhtest类实例
        public static VIKI.IDAL.IZhtestDAL CreaZhtestt()
        {
            string className = path + ".ZhtestDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IZhtestDAL)Assembly.Load(path).CreateInstance(className);
        }
        //实现 CreateWordtest方法，用于创建Wordtest类实例
        public static VIKI.IDAL.IWordtestDAL CreatWordtest()
        {
            string className = path + ".ReadtestDAL";
            //利用反射技术，动态加载指定类型
            return (VIKI.IDAL.IWordtestDAL)Assembly.Load(path).CreateInstance(className);
        }

    }
}
